//
//  Person.h
//  08-iOS9新特性(Nulllability, 泛型,_kindOf)
//
//  Created by Snow on 16/7/13.
//  Copyright © 2016年 Snow. All rights reserved.
//

#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface Person : NSObject
//Nulllability (只能用在对象类型上)是在编译层次上加了一些改动
// nonnull 声明的属性 不能为空(getter setter方法)
//@property (nonnull, nonatomic, copy) NSString *name;
//__nonnull 在属性的类型后面加__nonnull
@property (nonatomic, copy) NSString *__nonnull name;
//nullable 声明的属性 是可以为空(getter setter方法)
//@property (nullable, nonatomic, copy) NSString *gender;
//__nullable 在属性的类型后面加__nullable
@property (nonatomic, copy) NSString *__nullable gender;
//不可以像下面这么做
//@property ((nonnull, nonatomic, copy) NSInteger age;

// null_resettable setter方法是nulllable getter方法是nonnull
//举例: UIViewController中的View属性
@property (null_resettable, nonatomic, strong) NSArray *friends;
@property (nonatomic, retain) NSDictionary *dic;
//NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END
// 一般应用于头文件.h 一般将声明包含起来
//针对所有属性, 添加nonnull修饰
//也就是说 除了nullable null_resettable 以外需要加修饰, 其他都不需要


@end
NS_ASSUME_NONNULL_END
